// services/api.js
// API服务层

/**
 * API基础配置
 */
const API_CONFIG = {
  // 根据环境设置不同的基础URL
  baseUrl: __wxConfig.envVersion === 'develop' ? 'http://localhost:8080/api' : 'https://api.foreverlove.com/api',
  timeout: 10000
}

// 添加请求日志
function logRequest(url, method, data) {
  console.log('[API Request] URL:', url);
  console.log('[API Request] Method:', method);
  console.log('[API Request] Data:', data);
}

// 添加响应日志
function logResponse(url, response) {
  console.log('[API Response] URL:', url);
  console.log('[API Response] Status:', response.statusCode);
  console.log('[API Response] Data:', response.data);
}

/**
 * 基础请求方法
 * @param {Object} options - 请求配置
 * @returns {Promise}
 */
function request(options) {
  const url = API_CONFIG.baseUrl + options.url;
  const method = options.method || 'GET';
  const data = options.data || {};
  const header = options.header || {};
  
  // 添加默认请求头
  header['Content-Type'] = 'application/json';
  header['X-Requested-With'] = 'XMLHttpRequest';
  
  // 添加认证头
  const token = wx.getStorageSync('token');
  if (token) {
    header['Authorization'] = 'Bearer ' + token;
  }
  
  // 记录请求信息
  logRequest(url, method, data);
  console.log('[API Request] Headers:', header);
  
  return new Promise((resolve, reject) => {
    wx.request({
      url: url,
      method: method,
      data: data,
      header: header,
      timeout: API_CONFIG.timeout,
      success: (res) => {
        // 记录响应信息
        logResponse(url, res);
        
        if (res.statusCode >= 200 && res.statusCode < 300) {
          resolve(res.data);
        } else {
          // 处理HTTP错误状态码
          console.error(`[API Error] ${method} ${url} - Status: ${res.statusCode}`);
          reject(new Error(`HTTP ${res.statusCode}: ${res.errMsg}`));
        }
      },
      fail: (err) => {
        console.error(`[API Fail] ${method} ${url}`, err);
        reject(new Error(`Network Error: ${err.errMsg}`));
      }
    });
  });
}

/**
 * 认证相关API
 */
const authApi = {
  /**
   * 微信登录
   * @param {string} code - 微信登录凭证
   * @returns {Promise<any>}
   */
  wechatLogin(code) {
    return request({
      url: '/auth/wx-login',
      method: 'POST',
      data: { code }
    })
  },
  
  /**
   * 微信手机号登录
   * @param {Object} loginData - 登录数据
   * @param {string} loginData.code - 微信登录凭证
   * @param {string} loginData.encryptedData - 加密数据
   * @param {string} loginData.iv - 加密算法的初始向量
   * @returns {Promise<any>}
   */
  wechatPhoneLogin(loginData) {
    // 根据后端API实际情况，微信手机号登录和普通微信登录使用相同接口
    // 后端会根据是否包含encryptedData字段来判断是哪种登录方式
    return request({
      url: '/auth/wx-login',
      method: 'POST',
      data: loginData
    })
  },
  
  /**
   * 手机号密码登录
   * @param {Object} loginData - 登录数据
   * @param {string} loginData.phone - 手机号
   * @param {string} loginData.password - 密码
   * @returns {Promise<any>}
   */
  phoneLogin(loginData) {
    return request({
      url: '/phone-auth/login',
      method: 'POST',
      data: loginData
    })
  },
  
  /**
   * 发送短信验证码
   * @param {string} phone - 手机号
   * @returns {Promise<any>}
   */
  sendSmsCode(phone) {
    return request({
      url: '/phone-auth/send-code',
      method: 'POST',
      data: { phone }
    })
  },
  
  /**
   * 手机号验证码登录
   * @param {Object} loginData - 登录数据
   * @param {string} loginData.phone - 手机号
   * @param {string} loginData.code - 验证码
   * @returns {Promise<any>}
   */
  smsLogin(loginData) {
    return request({
      url: '/phone-auth/sms-login',
      method: 'POST',
      data: loginData
    })
  }
}

/**
 * 用户相关API
 */
const userApi = {
  /**
   * 获取用户信息
   * @returns {Promise<any>}
   */
  getProfile() {
    return request({
      url: '/users/profile',
      method: 'GET'
    })
  },
  
  /**
   * 更新用户信息
   * @param {Object} userData - 用户数据
   * @returns {Promise<any>}
   */
  updateProfile(userData) {
    return request({
      url: '/users/profile',
      method: 'PUT',
      data: userData
    })
  },
  
  /**
   * 绑定手机号
   * @param {string} code - 微信获取手机号的code
   * @returns {Promise<any>}
   */
  bindPhone(code) {
    return request({
      url: '/users/bind-phone',
      method: 'POST',
      data: { code }
    })
  },
  
  /**
   * 获取用户统计数据
   * @returns {Promise<any>}
   */
  getStats() {
    return request({
      url: '/users/stats',
      method: 'GET'
    })
  },
  
  /**
   * 获取用户设置
   * @returns {Promise<any>}
   */
  getSettings() {
    return request({
      url: '/users/settings',
      method: 'GET'
    })
  },
  
  /**
   * 更新用户设置
   * @param {Object} settings - 设置数据
   * @returns {Promise<any>}
   */
  updateSettings(settings) {
    return request({
      url: '/users/settings',
      method: 'PUT',
      data: settings
    })
  }
}

/**
 * 胶囊相关API
 */
const capsuleApi = {
  /**
   * 获取胶囊列表
   * @param {Object} params - 查询参数
   * @returns {Promise<any>}
   */
  getList(params = {}) {
    return request({
      url: '/memory-capsules',
      method: 'GET',
      data: params
    })
  },
  
  /**
   * 获取胶囊详情
   * @param {string} id - 胶囊ID
   * @returns {Promise<any>}
   */
  getDetail(id) {
    return request({
      url: `/memory-capsules/${id}`,
      method: 'GET'
    })
  },
  
  /**
   * 创建胶囊
   * @param {Object} data - 胶囊数据
   * @returns {Promise<any>}
   */
  create(data) {
    return request({
      url: '/memory-capsules',
      method: 'POST',
      data
    })
  },
  
  /**
   * 更新胶囊
   * @param {string} id - 胶囊ID
   * @param {Object} data - 胶囊数据
   * @returns {Promise<any>}
   */
  update(id, data) {
    return request({
      url: `/memory-capsules/${id}`,
      method: 'PUT',
      data
    })
  },
  
  /**
   * 删除胶囊
   * @param {string} id - 胶囊ID
   * @returns {Promise<any>}
   */
  delete(id) {
    return request({
      url: `/memory-capsules/${id}`,
      method: 'DELETE'
    })
  },
  
  /**
   * 切换收藏状态
   * @param {string} id - 胶囊ID
   * @returns {Promise<any>}
   */
  toggleFavorite(id) {
    return request({
      url: `/memory-capsules/${id}/favorite`,
      method: 'POST'
    })
  },
  
  /**
   * 分享胶囊
   * @param {string} id - 胶囊ID
   * @returns {Promise<any>}
   */
  share(id) {
    return request({
      url: `/memory-capsules/${id}/share`,
      method: 'POST'
    })
  },
  
  /**
   * 获取胶囊统计
   * @param {string} id - 胶囊ID
   * @returns {Promise<any>}
   */
  getStats(id) {
    return request({
      url: `/memory-capsules/${id}/stats`,
      method: 'GET'
    })
  },
  
  /**
   * 导出胶囊
   * @param {string} id - 胶囊ID
   * @param {string} format - 导出格式
   * @returns {Promise<any>}
   */
  export(id, format = 'json') {
    return request({
      url: `/memory-capsules/${id}/export`,
      method: 'GET',
      data: { format }
    })
  },
  
  /**
   * 搜索胶囊
   * @param {Object} params - 搜索参数
   * @returns {Promise<any>}
   */
  search(params) {
    return request({
      url: '/memory-capsules/search',
      method: 'GET',
      data: params
    })
  }
}

/**
 * 记忆条目相关API
 */
const entryApi = {
  /**
   * 获取条目列表
   * @param {string} capsuleId - 胶囊ID
   * @param {Object} params - 查询参数
   * @returns {Promise<any>}
   */
  getList(capsuleId, params = {}) {
    return request({
      url: `/memory-capsules/${capsuleId}/entries`,
      method: 'GET',
      data: params
    })
  },
  
  /**
   * 获取条目详情
   * @param {string} capsuleId - 胶囊ID
   * @param {string} entryId - 条目ID
   * @returns {Promise<any>}
   */
  getDetail(capsuleId, entryId) {
    return request({
      url: `/memory-capsules/${capsuleId}/entries/${entryId}`,
      method: 'GET'
    })
  },
  
  /**
   * 创建文本条目
   * @param {string} capsuleId - 胶囊ID
   * @param {string} content - 文本内容
   * @returns {Promise<any>}
   */
  createText(capsuleId, content) {
    return request({
      url: `/memory-capsules/${capsuleId}/entries`,
      method: 'POST',
      data: { type: 'text', content }
    })
  },
  
  /**
   * 创建图片条目
   * @param {string} capsuleId - 胶囊ID
   * @param {string} imageUrl - 图片URL
   * @param {string} content - 描述内容
   * @returns {Promise<any>}
   */
  createImage(capsuleId, imageUrl, content = '') {
    return request({
      url: `/memory-capsules/${capsuleId}/entries`,
      method: 'POST',
      data: { type: 'image', imageUrl, content }
    })
  },
  
  /**
   * 创建音频条目
   * @param {string} capsuleId - 胶囊ID
   * @param {string} audioUrl - 音频URL
   * @param {number} duration - 音频时长
   * @param {string} content - 描述内容
   * @returns {Promise<any>}
   */
  createAudio(capsuleId, audioUrl, duration, content = '') {
    return request({
      url: `/memory-capsules/${capsuleId}/entries`,
      method: 'POST',
      data: { type: 'audio', audioUrl, audioDuration: duration, content }
    })
  },
  
  /**
   * 更新条目
   * @param {string} capsuleId - 胶囊ID
   * @param {string} entryId - 条目ID
   * @param {Object} data - 更新数据
   * @returns {Promise<any>}
   */
  update(capsuleId, entryId, data) {
    return request({
      url: `/memory-capsules/${capsuleId}/entries/${entryId}`,
      method: 'PUT',
      data
    })
  },
  
  /**
   * 删除条目
   * @param {string} capsuleId - 胶囊ID
   * @param {string} entryId - 条目ID
   * @returns {Promise<any>}
   */
  delete(capsuleId, entryId) {
    return request({
      url: `/memory-capsules/${capsuleId}/entries/${entryId}`,
      method: 'DELETE'
    })
  },
  
  /**
   * 搜索条目
   * @param {string} capsuleId - 胶囊ID
   * @param {Object} params - 搜索参数
   * @returns {Promise<any>}
   */
  search(capsuleId, params) {
    return request({
      url: `/memory-capsules/${capsuleId}/entries/search`,
      method: 'GET',
      data: params
    })
  }
}

/**
 * 文件上传相关API
 */
const uploadApi = {
  /**
   * 上传图片
   * @param {string} filePath - 文件路径
   * @param {string} capsuleId - 胶囊ID
   * @returns {Promise<any>}
   */
  uploadImage(filePath, capsuleId) {
    return request({
      url: '/upload/image',
      method: 'POST',
      data: { filePath, capsuleId }
    })
  },
  
  /**
   * 上传音频
   * @param {string} filePath - 文件路径
   * @param {string} capsuleId - 胶囊ID
   * @returns {Promise<any>}
   */
  uploadAudio(filePath, capsuleId) {
    return request({
      url: '/upload/audio',
      method: 'POST',
      data: { filePath, capsuleId }
    })
  },
  
  /**
   * 上传头像
   * @param {string} filePath - 文件路径
   * @returns {Promise<any>}
   */
  uploadAvatar(filePath) {
    return request({
      url: '/upload/avatar',
      method: 'POST',
      data: { filePath }
    })
  },
  
  /**
   * 删除文件
   * @param {string} url - 文件URL
   * @returns {Promise<any>}
   */
  deleteFile(url) {
    return request({
      url: '/upload/delete',
      method: 'DELETE',
      data: { url }
    })
  }
}

/**
 * 情感相关API
 */
const emotionApi = {
  /**
   * 获取情感列表
   * @returns {Promise<any>}
   */
  getList() {
    return request({
      url: '/mood-records',
      method: 'GET'
    })
  },
  
  /**
   * 记录情感
   * @param {Object} emotionData - 情感数据
   * @returns {Promise<any>}
   */
  record(emotionData) {
    return request({
      url: '/mood-records',
      method: 'POST',
      data: emotionData
    })
  }
}

/**
 * 心情小偷相关API
 */
const thiefApi = {
  /**
   * 获取角色列表
   * @returns {Promise<any>}
   */
  getCharacters() {
    return request({
      url: '/thief/characters',
      method: 'GET'
    })
  },
  
  /**
   * 获取目标列表
   * @returns {Promise<any>}
   */
  getTargets() {
    return request({
      url: '/thief/targets',
      method: 'GET'
    })
  },
  
  /**
   * 开始偷取任务
   * @param {Object} taskData - 任务数据
   * @returns {Promise<any>}
   */
  startSteal(taskData) {
    return request({
      url: '/thief/steal',
      method: 'POST',
      data: taskData
    })
  },
  
  /**
   * 获取偷取结果
   * @param {string} taskId - 任务ID
   * @returns {Promise<any>}
   */
  getStealResult(taskId) {
    return request({
      url: `/thief/steal/${taskId}`,
      method: 'GET'
    })
  }
}

/**
 * 系统相关API
 */
const systemApi = {
  /**
   * 获取系统设置
   * @returns {Promise<any>}
   */
  getSettings() {
    return request({
      url: '/system/settings',
      method: 'GET'
    })
  },
  
  /**
   * 更新系统设置
   * @param {Object} data - 设置数据
   * @returns {Promise<any>}
   */
  updateSettings(data) {
    return request({
      url: '/system/settings',
      method: 'POST',
      data
    })
  },
  
  /**
   * 获取系统统计
   * @returns {Promise<any>}
   */
  getStats() {
    return request({
      url: '/system/stats',
      method: 'GET'
    })
  },
  
  /**
   * 系统备份
   * @returns {Promise<any>}
   */
  backup() {
    return request({
      url: '/system/backup',
      method: 'POST'
    })
  },
  
  /**
   * 系统恢复
   * @param {Object} data - 恢复数据
   * @returns {Promise<any>}
   */
  restore(data) {
    return request({
      url: '/system/restore',
      method: 'POST',
      data
    })
  }
}

/**
 * VIP相关API
 */
const vipApi = {
  /**
   * 获取VIP信息
   * @returns {Promise<any>}
   */
  getInfo() {
    return request({
      url: '/vip/info',
      method: 'GET'
    })
  },
  
  /**
   * 购买VIP
   * @param {Object} data - 购买数据
   * @returns {Promise<any>}
   */
  purchase(data) {
    return request({
      url: '/vip/purchase',
      method: 'POST',
      data
    })
  },
  
  /**
   * 获取VIP特权
   * @returns {Promise<any>}
   */
  getPrivileges() {
    return request({
      url: '/vip/privileges',
      method: 'GET'
    })
  }
}

/**
 * 分享相关API
 */
const shareApi = {
  /**
   * 创建分享
   * @param {Object} data - 分享数据
   * @returns {Promise<any>}
   */
  create(data) {
    return request({
      url: '/share/create',
      method: 'POST',
      data
    })
  },
  
  /**
   * 获取分享详情
   * @param {string} shareId - 分享ID
   * @returns {Promise<any>}
   */
  getDetail(shareId) {
    return request({
      url: `/share/${shareId}`,
      method: 'GET'
    })
  },
  
  /**
   * 删除分享
   * @param {string} shareId - 分享ID
   * @returns {Promise<any>}
   */
  delete(shareId) {
    return request({
      url: `/share/${shareId}`,
      method: 'DELETE'
    })
  }
}

/**
 * 搜索相关API
 */
const searchApi = {
  /**
   * 全局搜索
   * @param {Object} params - 搜索参数
   * @returns {Promise<any>}
   */
  global(params) {
    return request({
      url: '/search/global',
      method: 'GET',
      params
    })
  },
  
  /**
   * 搜索胶囊
   * @param {Object} params - 搜索参数
   * @returns {Promise<any>}
   */
  capsules(params) {
    return request({
      url: '/search/capsules',
      method: 'GET',
      params
    })
  },
  
  /**
   * 搜索记忆条目
   * @param {Object} params - 搜索参数
   * @returns {Promise<any>}
   */
  entries(params) {
    return request({
      url: '/search/entries',
      method: 'GET',
      params
    })
  }
}

/**
 * 情侣相关API
 */
const partnerApi = {
  /**
   * 绑定情侣
   * @param {string} partnerId - 伴侣ID
   * @returns {Promise<any>}
   */
  bindPartner(partnerId) {
    return request({
      url: '/partners/bind',
      method: 'POST',
      data: { partnerId }
    })
  },
  
  /**
   * 解除情侣绑定
   * @returns {Promise<any>}
   */
  unbindPartner() {
    return request({
      url: '/partners/unbind',
      method: 'POST'
    })
  },
  
  /**
   * 获取情侣信息
   * @returns {Promise<any>}
   */
  getPartnerInfo() {
    return request({
      url: '/partners/info',
      method: 'GET'
    })
  }
}

// 导出API模块
module.exports = {
  authApi,
  userApi,
  capsuleApi,
  entryApi,
  uploadApi,
  emotionApi,
  thiefApi,
  systemApi,
  vipApi,
  shareApi,
  searchApi,
  partnerApi,
  request
}